//1.引入mysql模块，连接mysql数据库

const mysql = require('mysql');

//2.创建池
const pool = mysql.createPool({
    host: 'localhost',
    user: 'root', //数据库的账户
    password: 'root', //数据库的密码
    port: '3306', //数据库的端口号
    database: 'blog' //数据库库名
})

//3.封装一个数据库模型基类（所有数据层的祖先）面向对象思维
//参数1： sql：要执行的sql语句
//参数2： params: 给sql语句占位符进行赋值的的参数 数组

module.exports = class Model {  //用es6语法声明一个所有model的基类
    //声明方法
    static query(sql, params){
        return new Promise((resolve, reject) => { 
        //4.使用池来连接
        //连接数据库
        pool.getConnection((err, connection) => { 
            if(err){//连接数据库报错
                //命令行输出错误
                console.log(err);

                //结束连接
                connection.release()
            }else{
                connection.query(sql, params, (err, result) => { //执行sql语句
                    if(err){ //执行sql语句报错
                        reject(err)
                    }else{
                        //SQL语句执行时，有时候会是0行受到影响，根据实际情况考虑是否为错误上报
                        if(result.affectedRows == 0){
                            reject(err)
                        }else{
                            resolve(result)
                        }
                    }
                })
                //结束连接，释放连接
                connection.release()
                }
            })
        })
    }
}